/**
 * 部门:管理 - 编辑工作人员
 * Created by mhy on 2017/1/9.
 */

var powerArr = new Array(); //定义权限数组来保存 添加的权限id
var rolePowerArr = new Array();   //角色自带的权限id
var flag = 0;       //用来记录第几次请求查看角色
$(document).ready(function() {

    /*获得当前角色id*/
    var workerId = getUrlParam('workerId');  //当前工作人员的id

    /*获得指定工作人员信息*/
    /* Ajax:
     * 功能:查看指定工作人员
     * */
    $.ajax({
        type:'GET',//请求类型
        url:'../department/manage/worker/' + workerId,//请求地址
        contentType: 'application/json;',//发送信息至服务器时内容编码类型
        dataType:'JSON',/*预期服务器返回的数据类型*/
        success:function (json) {//成功获取到后台返回的值后，对后台返回的值做相应的一系列操作
            var $powerTable = $("#powerTable");  //权限表
            var username = json.data.username;   //账户名
            var name = json.data.name;  //名称
            var roleId;      //roleId;
            var powers = json.data.powers;  //权限

            if(null != json.data.role){
                roleId = json.data.role.id; //roleId
            }else{
                roleId= "";
            }

            /*初始化用户名*/
            $("input[name='username']").val(username);
            /*初始化名称*/
            $("input[name='name']").val(name);

            /* 初始化当前角色的权限列表 */
            var $trObj;
            var $tdObj;
            var $aObj

            for(var i = 0;i < count(powers);i++){
                powerArr.push(powers[i].id);    //将已有的权限id加入到powerArr中
                $trObj = $("<tr></tr>");

                //ID列
                $tdObj = $("<td></td>");
                $tdObj = $("<td></td>");
                $tdObj.text(powers[i].id);

                $trObj.append($tdObj);

                //名称列
                $tdObj = $("<td></td>");
                $tdObj.text(powers[i].name);

                $trObj.append($tdObj);

                //类型列
                $tdObj = $("<td></td>");
                $tdObj.text(powers[i].type);

                $trObj.append($tdObj);

                //操作列
                $tdObj = $("<td></td>");
                $aObj =$("<a href='#' class='btn btn-danger btn-xs'><i class='fa fa-trash-o'></i> 删除 </a>");
                $aObj.attr("onclick","deletePower("+ powers[i].id +")");
                $tdObj.append($aObj);
                $trObj.append($tdObj);

                $powerTable.append($trObj);  //添加行
            }// ~ end for

            /* 将已有的权限选择框改为disabled*/
            var $checkboxes =  $("input[type='checkbox']",$powerModal);
            for(var i = 0;i < count(powerArr);i++){
                for(var j = 0;j < count($checkboxes);j++){
                    if($checkboxes.eq(j).parents("td").siblings("td").eq(0).text() == powerArr[i]){
                        $checkboxes.eq(j).prop("checked","checked");
                        $checkboxes.eq(j).attr("disabled","disabled");

                        break;
                    }
                }   //end for
            }//end for

            /*初始化角色*/
            $("#roleList").val(roleId);   //角色
            if($("#roleList").val() == null){     //防止没有加载角色名称
                reloadPage();
            }
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
        },
        fail:function () { //如果在传输过程失败了：调用fail中对应的匿名函数(可选)
        },
        cache:true,
    });

    /* 添加权限*/
    var $powerTable = $("#powerTable");  // 权限表
    var $powerModal = $(".bs-example-modal-ap");  //添加权限弹出框
    var $powerEnsureButton = $(".btn-primary",$powerModal);  //添加权限里的确定按钮

    $powerEnsureButton.click(function () {
        addPower(powerArr,$powerTable,$powerModal);
    });

    /* 保存按钮 */
    $("#save").click(function () {
        var $this = $(this);
        var password = $("input[name='password']").val(); //密码
        var workerName = $("input[name='name']").val(); //工作人员名称
        var roleId = parseInt($("select[name='role']").select().val());   //角色名
        var $errors = $("div.error");
        var $inputs = $("input",".right_col");
        var $info =  $("div.info");     //信息提示

        /* 判断账户输入是否合格 */
        $errors.css("display","none");

        //判断账户名是否为空
        for(var i = 0;i < $inputs.length;i++){
            if(i == 1)  continue;  //跳过密码为空提示
            if($inputs.eq(i).val().length == 0){

                $errors.eq(i).css("display","block");
                $errors.eq(i).text("请填写" +  $inputs.eq(i).parents("div").eq(0).siblings("label").text());

                return;

            }
        }   //end for

        if((password.length != 0 && password.length < 6) || password.length > 12){
            $errors.eq(1).css("display","block");
            $errors.eq(1).text("密码长度应在6至12之间");

            return;
        } else if(workerName.length > 10){
            $errors.eq(2).css("display","block");
            $errors.eq(2).text("名称长度不要超过10");

            return;
        }

        /* 判断密码是否修改 如果没有修改 传为NULL */
        if(password.length == 0){
            password = null;
        }

        /* 判断是否选择了角色*/
        if(isNaN(roleId)){
            $errors.eq(3).css("display","block");
            $errors.eq(3).text("请选择角色");

            return;
        }

        var target;
        /* 如果去掉了原有角色的权限 则将权限id改为负数 */
        for(var i = 0;i < rolePowerArr.length;i++){
            target = false;
            var j = 0;

            while(j < powerArr.length ){
                if(rolePowerArr[i] == powerArr[j]){ //如果有 则不操作
                    target = true;
                    break;
                }
                j++;
            }   //end while

            if(!target){   //如果没有
                var id =  rolePowerArr[i];

                id *= -1;
                powerArr.push(id);
            }
        }   //end for

        $this.attr("disabled","disabled");

        /* Ajax:
         * 功能:编辑工作人员
         * */
        $.ajax({
            type:'PUT',//请求类型
            url:'../department/manage/worker/'+workerId,//请求地址
            contentType: 'application/json;',//发送信息至服务器时内容编码类型
            data:JSON.stringify({
                                    "opt": "update",
                                    "password":password,
                                    "name":workerName,
                                    "role":roleId,
                                    "private_powers":powerArr
            }),
            dataType:'JSON',/*预期服务器返回的数据类型*/
            success:function (json) {//成功获取到后台返回的值后，对后台返回的值做相应的一系列操作
                if(json.result){
                    promptInformation($info,"success","编辑成功，即将跳转");

                    setTimeout(function(){   //跳转到工作人员列表页面
                        toDepartmentWorkerList();
                    }, 500);
                }else{
                    $this.removeAttr("disabled");
                    promptInformation($info,"error",json.err_msg);
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
            },
            fail:function () { //如果在传输过程失败了：调用fail中对应的匿名函数(可选)
            },
            cache:true,
        });
    });

    //返回按钮
    $("button.btn-info").eq(0).click(function () {
        goLastPage();
    });

    /*选择角色时 列出相应的权限和发文范围*/
    $("#roleList").change(function () {
        var $powerTable = $("#powerTable");  //权限表
        var roleId = $("#roleList").select().val();

        flag++;

        /*如果没有选 什么都不做*/
        if(count(roleId) == 0){
            return;
        }

        /* 清空权限表 */
        while(powerArr.length != 0){
            deletePower(powerArr[0]);
        }

        rolePowerArr = [];  //清空记录过的角色权限id

        /*获得指定角色信息*/
        /* Ajax:
         * 功能:查看指定角色
         * */
        $.ajax({
            type:'GET',//请求类型
            url:'../department/manage/role/' + roleId,//请求地址
            contentType: 'application/json;',//发送信息至服务器时内容编码类型
            dataType:'JSON',/*预期服务器返回的数据类型*/
            success:function (json) {//成功获取到后台返回的值后，对后台返回的值做相应的一系列操作
                var powers = json.data.powers;

                /* 初始化当前角色的权限列表 */
                var $trObj;
                var $tdObj;
                var $aObj;

                for(var i = 0;i < count(powers);i++){
                    rolePowerArr.push(powers[i].id) //记录角色原有的权限id
                    if(1 == flag || 0 == flag) continue;

                    powerArr.push(powers[i].id);    //将已有的权限id加入到powerArr中

                    $trObj = $("<tr></tr>");

                    //ID列
                    $tdObj = $("<td></td>");
                    $tdObj.text(powers[i].id);
                    $trObj.append($tdObj);

                    //名称列
                    $tdObj = $("<td></td>");
                    $tdObj.text(powers[i].name);
                    $trObj.append($tdObj);

                    //类型列
                    $tdObj = $("<td></td>");
                    $tdObj.text(powers[i].type);
                    $trObj.append($tdObj);

                    //操作列
                    $tdObj = $("<td></td>");
                    $aObj =$("<a href='#' class='btn btn-danger btn-xs'><i class='fa fa-trash-o'></i> 删除 </a>");
                    $aObj.attr("onclick","deletePower("+ powers[i].id +")");
                    $tdObj.append($aObj);
                    $trObj.append($tdObj);

                    $powerTable.append($trObj);  //添加行
                }// ~ end for

                if(1 == flag || 0 == flag) return;

                setTimeout(function () {
                    /* 将已有的权限选择框改为disabled*/
                    var $checkboxes =  $("input[type='checkbox']",$powerModal);
                    for(var i = 0;i < count(powerArr);i++){
                        for(var j = 0;j < count($checkboxes);j++){
                            if($checkboxes.eq(j).parents("td").siblings("td").eq(0).text() == powerArr[i]){
                                $checkboxes.eq(j).prop("checked","checked");
                                $checkboxes.eq(j).attr("disabled","disabled");

                                break;
                            }
                        }   //end for
                    }//end for
                },500);

            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
            },
            fail:function () { //如果在传输过程失败了：调用fail中对应的匿名函数(可选)
            },
            cache:true,
        });
    })


});

/* 删除权限范围 */
function deletePower(powerId) {
    var $powerModal = $(".bs-example-modal-ap");  //添加发送范围弹出框
    var $checkboxes =  $("input[type='checkbox']",$powerModal);
    var $tr = $("tr",".powerTable");

    for(var i = 0;i < $tr.length ;i++){
        if(powerId ==  $("td",$tr.eq(i)).eq(0).text()){
            $tr.eq(i).remove();
            for(var j = 0 ;j < $checkboxes.length;++j){
                if($checkboxes.eq(j).attr("disabled")){
                    if($("td",$checkboxes.eq(j).parents("tr")).eq(1).text() == powerId){
                        $checkboxes.eq(j).removeAttr("disabled");
                        $checkboxes.eq(j).removeAttr("checked");
                    }
                }

            } //end for
            for(var n = 0;n < powerArr.length;n++){
                if(powerArr[n] == powerId){
                    powerArr.splice(n,1);
                }
            }

        }
    }   //end for
};


